package com.epoint.rest;

import com.epoint.springtest.User;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.util.HashMap;
import java.util.Map;

@RestController
public class TestParamsRest {

    /**
     * 总结：如果请求类型非：json，而是x-www-form-urlencoded，则使用RequestParam
     * 且，参数Params最好定义成String类型，如果不是String格式，则 一顿加密。
     * 且，ajax data最好使用JSON.stringify转成json字符串。
     *
     * 他会ajax data会分别传入
     *
     * 参数：{
     *         params : JSON.stringify({
     *             id:'1',
     *             name:'content'
     *         }),
     *         jkh : JSON.stringify({
     *             id:'1',
     *             name:'content',
     *             age: 23
     *         })
     *     }
     *
     *     对应 params    jkh    2个参数
     *     这里特殊一点，可以用@RequestParams JSONObject 或者 String 来接
     *
     *     综合考虑 还是用@RequestParam的好
     */
    @PostMapping("/testRequestParams")
    public User testRequestParams(@RequestParam("params") JSONObject params,
                                  HttpServletRequest request, HttpServletResponse response){
        Map<String, Object> map = new HashMap();

        map.put("name", "jkh");
        map.put("age", 23);
        map.put("gf", "wxy");

        User user = new User();
        user.setName("纪宽豪");
        user.setAge(28);
        return user;
    }

    /**
     * 总结：如果请求类型非：x-www-form-urlencoded，而是json，则使用RequestBody
     * 且，参数Params最好定义成String类型，如果不是String格式，则 一顿加密。
     * 且，ajax data最好使用JSON.stringify转成json字符串。
     *
     * 他会ajax data所有的 数据打包进来
     * 参数：JSON.stringify({
     *        params : {
     *             id:'1',
     *             name:'content'
     *         },
     *        jkh : {
     *              id:'1',
     *              name:'content',
     *              age: 23
     *          }
     *    })
     *
     *     对应 params    jkh    2个参数
     */
    @PostMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String params){
        return params.toString();
    }
}
